<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
          'use strict';
const globalName = 'Global Scope Name';
const person = {
  name: 'John',
  hobbies: ['reading', 'coding'],
  printHobbies() {
    this.hobbies.forEach(function(hobby) {
      console.log(`${this.name} likes ${hobby}`);
    });
  },
  async introduce() {
    const result = await new Promise((resolve) => {
      setTimeout(() => {
        resolve(this.name);
      }, 1000);
    });
    console.log(result);
  },
  nestedArrowFunction: () => {
    console.log(this.name); 
  }
};
person.printHobbies();
person.introduce();
person.nestedArrowFunction();
    </script>
    <!-- 参考答案
1.person.printHobbies(); 输出：报错 Cannot read property 'name' of undefined。
原因：在严格模式下，printHobbies 方法里的 forEach 回调函数是普通函数，它独立调用，this 指向 undefined。尽管它处于 person 对象的方法内部，但普通函数遵循自身调用规则，this 脱离了 person 对象，尝试访问 undefined 的 name 属性便报错。
2.person.introduce(); 输出：John。
原因：introduce 方法内部使用 async/await 处理异步操作。setTimeout 的回调箭头函数没有自己的 this，它会捕获外层函数 introduce 的 this，而 introduce 作为 person 的方法被调用，this 指向 person，因此 resolve(this.name) 传入的是 person 的 name 值，即 John，最终打印 John。
3.person.nestedArrowFunction(); 输出：报错 ReferenceError: name is not defined。
原因：箭头函数没有自己的 this，它的 this 在定义时就确定，会继承外层作用域的 this。此处的外层作用域是全局作用域，且处于严格模式下，全局作用域没有定义 name 变量，所以报变量未定义错误。 -->
  </head>
  <body></body>
</html>
